package com.test.design.pattern.singleton.demo9;

import java.io.Serializable;

/**
 * @ClasName Singleton
 * @Descripution TODO 破坏单例模式 序列化反序列化
 * @Author leikw
 * @Date 2021/11/1 14:36
 * @Version V1.0
 */
//使上面定义的单例类（Singleton）可以创建多个对象，枚举方式除外。有两种方式，分别是序列化
//和反射。
public class Singleton implements Serializable {

    private Singleton(){};

    private static class SingletonHolder{
        private static final Singleton SINGLETON =new Singleton();
    }

    public static Singleton getInstance(){
        return  SingletonHolder.SINGLETON;
    }

    /**
     * 下面是为了解决序列化反序列化破解单例模式
     * 在Singleton类中添加 readResolve() 方法，在反序列化时被反射调用，如果定义了这个方法，
     * 就返回这个方法的值，如果没有定义，则返回新new出来的对象。
     */
    private Object readResolve() {
        return SingletonHolder.SINGLETON;
    }

}
